77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
"""
|
|
MiniMax Anthropic transformation config - extends AnthropicConfig for MiniMax's Anthropic-compatible API
|
|
"""
|
|
from typing import Optional
|
|
|
|
import litellm
|
|
from litellm.llms.anthropic.experimental_pass_through.messages.transformation import (
|
|
AnthropicMessagesConfig,
|
|
)
|
|
from litellm.secret_managers.main import get_secret_str
|
|
|
|
|
|
class MinimaxMessagesConfig(AnthropicMessagesConfig):
|
|
"""
|
|
MiniMax Anthropic configuration that extends AnthropicConfig.
|
|
MiniMax provides an Anthropic-compatible API at:
|
|
- International: https://api.minimax.io/anthropic
|
|
- China: https://api.minimaxi.com/anthropic
|
|
|
|
Supported models:
|
|
- MiniMax-M2.1
|
|
- MiniMax-M2.1-lightning
|
|
- MiniMax-M2
|
|
"""
|
|
|
|
@property
|
|
def custom_llm_provider(self) -> Optional[str]:
|
|
return "minimax"
|
|
|
|
@staticmethod
|
|
def get_api_key(api_key: Optional[str] = None) -> Optional[str]:
|
|
"""
|
|
Get MiniMax API key from environment or parameters.
|
|
"""
|
|
return api_key or get_secret_str("MINIMAX_API_KEY") or litellm.api_key
|
|
|
|
@staticmethod
|
|
def get_api_base(
|
|
api_base: Optional[str] = None,
|
|
) -> str:
|
|
"""
|
|
Get MiniMax API base URL.
|
|
Defaults to international endpoint: https://api.minimax.io/anthropic
|
|
For China, set to: https://api.minimaxi.com/anthropic
|
|
"""
|
|
return (
|
|
api_base
|
|
or get_secret_str("MINIMAX_API_BASE")
|
|
or "https://api.minimax.io/anthropic/v1/messages"
|
|
)
|
|
|
|
def get_complete_url(
|
|
self,
|
|
api_base: Optional[str],
|
|
api_key: Optional[str],
|
|
model: str,
|
|
optional_params: dict,
|
|
litellm_params: dict,
|
|
stream: Optional[bool] = None,
|
|
) -> str:
|
|
"""
|
|
Get the complete URL for MiniMax API.
|
|
Override to ensure we use MiniMax's endpoint, not Anthropic's.
|
|
"""
|
|
# Get the base URL (either provided or default MiniMax endpoint)
|
|
base_url = self.get_api_base(api_base=api_base)
|
|
|
|
# If the base URL already includes the full path, return it
|
|
if base_url.endswith("/v1/messages"):
|
|
return base_url
|
|
|
|
# Otherwise append the messages endpoint
|
|
if base_url.endswith("/"):
|
|
return f"{base_url}v1/messages"
|
|
else:
|
|
return f"{base_url}/v1/messages"
|