mirror of
https://github.com/alibaba/higress.git
synced 2026-05-28 14:47:29 +08:00
fix(ai-proxy): preserve empty Claude tool inputs (#3799)
Signed-off-by: Betula-L <6059935+Betula-L@users.noreply.github.com> Co-authored-by: Betula-L <6059935+Betula-L@users.noreply.github.com>
This commit is contained in:
@@ -383,6 +383,42 @@ func TestClaudeToOpenAIConverter_ConvertClaudeRequestToOpenAI(t *testing.T) {
|
||||
assert.Equal(t, float64(5), args["max_results"])
|
||||
})
|
||||
|
||||
t.Run("preserve_empty_tool_use_input", func(t *testing.T) {
|
||||
claudeRequest := `{
|
||||
"model": "anthropic/claude-sonnet-4",
|
||||
"messages": [{
|
||||
"role": "assistant",
|
||||
"content": [{
|
||||
"type": "thinking",
|
||||
"thinking": "Need to list items.",
|
||||
"signature": "sig"
|
||||
}, {
|
||||
"type": "tool_use",
|
||||
"id": "toolu_empty",
|
||||
"name": "list_items",
|
||||
"input": {}
|
||||
}]
|
||||
}],
|
||||
"max_tokens": 1000
|
||||
}`
|
||||
|
||||
result, err := converter.ConvertClaudeRequestToOpenAI([]byte(claudeRequest))
|
||||
require.NoError(t, err)
|
||||
require.Contains(t, string(result), `"input":{}`)
|
||||
|
||||
var openaiRequest chatCompletionRequest
|
||||
err = json.Unmarshal(result, &openaiRequest)
|
||||
require.NoError(t, err)
|
||||
|
||||
require.Len(t, openaiRequest.Messages, 1)
|
||||
assistantMsg := openaiRequest.Messages[0]
|
||||
require.Len(t, assistantMsg.ToolCalls, 1)
|
||||
assert.Equal(t, "{}", assistantMsg.ToolCalls[0].Function.Arguments)
|
||||
require.Len(t, assistantMsg.ClaudeContentBlocks, 2)
|
||||
require.NotNil(t, assistantMsg.ClaudeContentBlocks[1].Input)
|
||||
assert.Empty(t, *assistantMsg.ClaudeContentBlocks[1].Input)
|
||||
})
|
||||
|
||||
t.Run("convert_tool_result_to_tool_message", func(t *testing.T) {
|
||||
// Test Claude tool_result conversion to OpenAI tool message format
|
||||
claudeRequest := `{
|
||||
|
||||
Reference in New Issue
Block a user