diff --git a/docs/my-website/docs/providers/anthropic.md b/docs/my-website/docs/providers/anthropic.md index 617476b97..198a6a03d 100644 --- a/docs/my-website/docs/providers/anthropic.md +++ b/docs/my-website/docs/providers/anthropic.md @@ -4,7 +4,6 @@ LiteLLM supports - `claude-3` (`claude-3-opus-20240229`, `claude-3-sonnet-20240229`) - `claude-2` - `claude-2.1` -- `claude-instant-1` - `claude-instant-1.2` ## API Keys @@ -56,7 +55,6 @@ for chunk in response: | claude-3-sonnet | `completion('claude-3-sonnet-20240229', messages)` | `os.environ['ANTHROPIC_API_KEY']` | | claude-2.1 | `completion('claude-2.1', messages)` | `os.environ['ANTHROPIC_API_KEY']` | | claude-2 | `completion('claude-2', messages)` | `os.environ['ANTHROPIC_API_KEY']` | -| claude-instant-1 | `completion('claude-instant-1', messages)` | `os.environ['ANTHROPIC_API_KEY']` | | claude-instant-1.2 | `completion('claude-instant-1.2', messages)` | `os.environ['ANTHROPIC_API_KEY']` | ## Advanced diff --git a/litellm/llms/anthropic.py b/litellm/llms/anthropic.py index 829a8becd..79b84c4d2 100644 --- a/litellm/llms/anthropic.py +++ b/litellm/llms/anthropic.py @@ -121,11 +121,29 @@ def completion( prompt = prompt_factory( model=model, messages=messages, custom_llm_provider="anthropic" ) - + """ + format messages for anthropic + 1. Anthropic supports roles like "user" and "assistant", (here litellm translates system-> assistant) + 2. The first message always needs to be of role "user" + """ + # 1. Anthropic only supports roles like "user" and "assistant" for message in messages: if message["role"] == "system": message["role"] = "assistant" + # 2. The first message always needs to be of role "user" + if len(messages) > 0: + if messages[0]["role"] != "user": + # find the index of the first user message + for i, message in enumerate(messages): + if message["role"] == "user": + break + + # remove the user message at existing position and add it to the front + messages.pop(i) + # move the first user message to the front + messages = [message] + messages + ## Load Config config = litellm.AnthropicConfig.get_config() for k, v in config.items(): diff --git a/litellm/tests/test_completion.py b/litellm/tests/test_completion.py index 163a66af3..bbe1dae3a 100644 --- a/litellm/tests/test_completion.py +++ b/litellm/tests/test_completion.py @@ -56,7 +56,7 @@ def test_completion_custom_provider_model_name(): def test_completion_claude(): litellm.set_verbose = True litellm.cache = None - litellm.AnthropicConfig(max_tokens_to_sample=200, metadata={"user_id": "1224"}) + litellm.AnthropicConfig(max_tokens=200, metadata={"user_id": "1224"}) messages = [ { "role": "system", @@ -67,7 +67,7 @@ def test_completion_claude(): try: # test without max tokens response = completion( - model="claude-instant-1", + model="claude-instant-1.2", messages=messages, request_timeout=10, )