Fix auth issue

This commit is contained in:
Sameer Kankute 2025-11-25 18:26:25 +05:30
parent 29057ba6ad
commit afe540e88d
4 changed files with 127 additions and 11 deletions

View file

@ -1,11 +1,10 @@
"""
Azure Anthropic transformation config - extends AnthropicConfig with Azure authentication
"""
from typing import TYPE_CHECKING, Any, Dict, List, Optional, Union
from typing import TYPE_CHECKING, Dict, List, Optional, Union
import litellm
from litellm.llms.anthropic.chat.transformation import AnthropicConfig
from litellm.llms.azure.common_utils import BaseAzureLLM, get_azure_ad_token
from litellm.llms.azure.common_utils import BaseAzureLLM
from litellm.types.llms.openai import AllMessageValues
from litellm.types.router import GenericLiteLLMParams
@ -56,6 +55,11 @@ class AzureAnthropicConfig(AnthropicConfig):
headers = BaseAzureLLM._base_validate_azure_environment(
headers=headers, litellm_params=litellm_params_obj
)
# Azure Anthropic uses x-api-key header (not api-key)
# Convert api-key to x-api-key if present
if "api-key" in headers and "x-api-key" not in headers:
headers["x-api-key"] = headers.pop("api-key")
# Get tools and other anthropic-specific setup
tools = optional_params.get("tools")
@ -81,10 +85,6 @@ class AzureAnthropicConfig(AnthropicConfig):
user_anthropic_beta_headers=user_anthropic_beta_headers,
mcp_server_used=mcp_server_used,
)
# Remove x-api-key from anthropic headers since Azure uses different auth
anthropic_headers.pop("x-api-key", None)
# Merge headers - Azure auth (api-key or Authorization) takes precedence
headers = {**anthropic_headers, **headers}

View file

@ -2379,10 +2379,18 @@ def completion( # type: ignore # noqa: PLR0915
)
# Ensure the URL ends with /v1/messages
if not api_base.endswith("/v1/messages"):
if not api_base.endswith("/anthropic"):
api_base = api_base.rstrip("/") + "/anthropic"
api_base = api_base.rstrip("/") + "/v1/messages"
api_base = api_base.rstrip("/")
if api_base.endswith("/v1/messages"):
pass
elif api_base.endswith("/anthropic/v1/messages"):
pass
else:
if "/anthropic" in api_base:
parts = api_base.split("/anthropic", 1)
api_base = parts[0] + "/anthropic"
else:
api_base = api_base + "/anthropic"
api_base = api_base + "/v1/messages"
response = azure_anthropic_chat_completions.completion(
model=model,

View file

@ -1087,6 +1087,60 @@
"output_cost_per_token": 1.5e-05,
"supports_function_calling": true
},
"azure/claude-haiku-4-5": {
"input_cost_per_token": 1e-06,
"litellm_provider": "azure_anthropic",
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"max_tokens": 64000,
"mode": "chat",
"output_cost_per_token": 5e-06,
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"azure/claude-opus-4-1": {
"input_cost_per_token": 1.5e-05,
"litellm_provider": "azure_anthropic",
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"max_tokens": 32000,
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"azure/claude-sonnet-4-5": {
"input_cost_per_token": 3e-06,
"litellm_provider": "azure_anthropic",
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"max_tokens": 64000,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"azure/computer-use-preview": {
"input_cost_per_token": 3e-06,
"litellm_provider": "azure",

View file

@ -1087,6 +1087,60 @@
"output_cost_per_token": 1.5e-05,
"supports_function_calling": true
},
"azure/claude-haiku-4-5": {
"input_cost_per_token": 1e-06,
"litellm_provider": "azure_anthropic",
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"max_tokens": 64000,
"mode": "chat",
"output_cost_per_token": 5e-06,
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"azure/claude-opus-4-1": {
"input_cost_per_token": 1.5e-05,
"litellm_provider": "azure_anthropic",
"max_input_tokens": 200000,
"max_output_tokens": 32000,
"max_tokens": 32000,
"mode": "chat",
"output_cost_per_token": 7.5e-05,
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"azure/claude-sonnet-4-5": {
"input_cost_per_token": 3e-06,
"litellm_provider": "azure_anthropic",
"max_input_tokens": 200000,
"max_output_tokens": 64000,
"max_tokens": 64000,
"mode": "chat",
"output_cost_per_token": 1.5e-05,
"supports_assistant_prefill": true,
"supports_computer_use": true,
"supports_function_calling": true,
"supports_pdf_input": true,
"supports_prompt_caching": true,
"supports_reasoning": true,
"supports_response_schema": true,
"supports_tool_choice": true,
"supports_vision": true
},
"azure/computer-use-preview": {
"input_cost_per_token": 3e-06,
"litellm_provider": "azure",