fix(factory.py): Handle system only message to anthropic (#10678)

Fixes error where passing system only message to anthropic causes requests to fail
This commit is contained in:
Krish Dholakia 2025-05-08 22:44:39 -07:00 • committed by GitHub
parent 96e31edad3
commit 5325ee4382
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 1 deletions

View file

@ -55,6 +55,11 @@ DEFAULT_USER_CONTINUE_MESSAGE = {
"content": "Please continue.",
} # similar to autogen. Only used if `litellm.modify_params=True`.
DEFAULT_USER_CONTINUE_MESSAGE_TYPED = ChatCompletionUserMessage(
role="user",
content="Please continue.",
)
# used to interweave assistant messages, to ensure user/assistant alternating
DEFAULT_ASSISTANT_CONTINUE_MESSAGE = ChatCompletionAssistantMessage(
role="assistant",
@ -1408,6 +1413,17 @@ def anthropic_messages_pt( # noqa: PLR0915
AnthopicMessagesAssistantMessageParam,
]
] = []
if len(messages) == 0:
if not litellm.modify_params:
raise litellm.BadRequestError(
message=f"Anthropic requires at least one non-system message. Either provide one, or set `litellm.modify_params = True` // `litellm_settings::modify_params: True` to add the dummy user message - {DEFAULT_USER_CONTINUE_MESSAGE_TYPED}.",
model=model,
llm_provider=llm_provider,
)
else:
messages.append(DEFAULT_USER_CONTINUE_MESSAGE_TYPED)
msg_i = 0
while msg_i < len(messages):
user_content: List[AnthropicMessagesUserMessageValues] = []
@ -1613,7 +1629,7 @@ def anthropic_messages_pt( # noqa: PLR0915
llm_provider=llm_provider,
)
if new_messages[-1]["role"] == "assistant":
if len(new_messages) > 0 and new_messages[-1]["role"] == "assistant":
if isinstance(new_messages[-1]["content"], str):
new_messages[-1]["content"] = new_messages[-1]["content"].rstrip()
elif isinstance(new_messages[-1]["content"], list):

View file

@ -1157,3 +1157,16 @@ def test_anthropic_redacted_thinking_in_assistant_message(model):
response = litellm.completion(**params)
assert response is not None
def test_just_system_message():
litellm._turn_on_debug()
litellm.modify_params = True
params = {
"model": "anthropic/claude-3-7-sonnet-20250219",
"messages": [{"role": "system", "content": "You are a helpful assistant."}],
}
response = litellm.completion(**params)
assert response is not None