Merge pull request #2780 from eercanayar/fix-anthropic-messages-api

Fix Anthropic Messages Prompt Template function to add a third condition: list of text-content dictionaries
This commit is contained in:
Krish Dholakia 2024-04-27 05:45:42 -07:00 • committed by GitHub
commit 317b9b7d96
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 51 additions and 3 deletions

View file

@ -722,9 +722,15 @@ def anthropic_messages_pt_xml(messages: list):
assistant_content = []
## MERGE CONSECUTIVE ASSISTANT CONTENT ##
while msg_i < len(messages) and messages[msg_i]["role"] == "assistant":
assistant_text = (
messages[msg_i].get("content") or ""
) # either string or none
# Handle assistant messages as string, none, or list of text-content dictionaries.
if isinstance(messages[msg_i].get("content"), list):
assistant_text = ''
for content in messages[msg_i]["content"]:
if content.get("type") == "text":
assistant_text += content["text"]
else:
assistant_text = messages[msg_i].get("content") or ""
if messages[msg_i].get(
"tool_calls", []
): # support assistant tool invoke convertion

View file

@ -230,6 +230,48 @@ def test_completion_claude_3_function_call():
except Exception as e:
pytest.fail(f"Error occurred: {e}")
def test_completion_claude_3_with_text_content_dictionaries():
litellm.set_verbose = True
messages = [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Hello"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Hello! How can I assist you today?"
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Hello again!"
}
]
}
]
try:
# test without max tokens
response = completion(
model="anthropic/claude-3-opus-20240229",
messages=messages,
)
# Add any assertions, here to check response args
print(response)
except Exception as e:
pytest.fail(f"Error occurred: {e}")
def test_parse_xml_params():
from litellm.llms.prompt_templates.factory import parse_xml_params