fix(gemini): return malformed Anthropic messages as an invalid request instead of raising from the token counter

This commit is contained in:
shrey kharbanda 2026-09-24 16:42:35 +00:00
parent 78a8a4afe9
commit 242c8ed9f1
2 changed files with 15 additions and 3 deletions

View file

@ -54,9 +54,12 @@ def build_count_tokens_payload(raw: AnthropicCountTokensInput) -> GeminiCountTok
request: Final = _validated_request(raw)
if isinstance(request, InvalidAnthropicRequest):
return request
openai_request, _ = LiteLLMAnthropicMessagesAdapter().translate_anthropic_to_openai(
request, custom_llm_provider="gemini"
)
try:
openai_request, _ = LiteLLMAnthropicMessagesAdapter().translate_anthropic_to_openai(
request, custom_llm_provider="gemini"
)
except (KeyError, TypeError, ValueError) as e:
return InvalidAnthropicRequest(message=f"Invalid Anthropic Messages request: {e!r}")
system_instruction, remaining_messages = _transform_system_message(
supports_system_message=True, messages=openai_request["messages"]
)

View file

@ -138,3 +138,12 @@ def test_tools_that_are_not_a_list_are_rejected_as_invalid():
assert isinstance(result, InvalidAnthropicRequest), result
assert "tools" in result.message, result.message
def test_message_without_a_role_is_rejected_as_invalid_not_raised():
result = build_count_tokens_payload(
{"model": MODEL, "messages": [{"content": "hi"}], "system": None, "tools": None}
)
assert isinstance(result, InvalidAnthropicRequest), result
assert "role" in result.message, result.message