feat: improve OpenAI messages compatibility for Claude Code
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/Wei-Shaw/sub2api/internal/pkg/apicompat"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestApplyAnthropicCompatFullReplayGuard_TrimsOldMessages(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
req := &apicompat.AnthropicRequest{Messages: make([]apicompat.AnthropicMessage, 0, openAICompatAnthropicReplayMaxTailMessages+3)}
|
||||
for i := 0; i < openAICompatAnthropicReplayMaxTailMessages+3; i++ {
|
||||
req.Messages = append(req.Messages, apicompat.AnthropicMessage{
|
||||
Role: "user",
|
||||
Content: json.RawMessage(fmt.Sprintf(`"message-%02d"`, i)),
|
||||
})
|
||||
}
|
||||
|
||||
trimmed := applyAnthropicCompatFullReplayGuard(req)
|
||||
|
||||
require.True(t, trimmed)
|
||||
require.Len(t, req.Messages, openAICompatAnthropicReplayMaxTailMessages)
|
||||
require.JSONEq(t, `"message-03"`, string(req.Messages[0].Content))
|
||||
require.JSONEq(t, `"message-14"`, string(req.Messages[len(req.Messages)-1].Content))
|
||||
}
|
||||
|
||||
func TestApplyAnthropicCompatFullReplayGuard_KeepsToolBoundaryIntact(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
req := &apicompat.AnthropicRequest{Messages: make([]apicompat.AnthropicMessage, 0, openAICompatAnthropicReplayMaxTailMessages+3)}
|
||||
for i := 0; i < openAICompatAnthropicReplayMaxTailMessages+3; i++ {
|
||||
role := "user"
|
||||
content := json.RawMessage(fmt.Sprintf(`"message-%02d"`, i))
|
||||
if i == 1 {
|
||||
role = "assistant"
|
||||
content = json.RawMessage(`[{"type":"tool_use","id":"toolu_keep","name":"Read","input":{"file_path":"main.go"}}]`)
|
||||
}
|
||||
if i == 3 {
|
||||
content = json.RawMessage(`[{"type":"tool_result","tool_use_id":"toolu_keep","content":"ok"}]`)
|
||||
}
|
||||
req.Messages = append(req.Messages, apicompat.AnthropicMessage{
|
||||
Role: role,
|
||||
Content: content,
|
||||
})
|
||||
}
|
||||
|
||||
trimmed := applyAnthropicCompatFullReplayGuard(req)
|
||||
|
||||
require.True(t, trimmed)
|
||||
require.Len(t, req.Messages, openAICompatAnthropicReplayMaxTailMessages+2)
|
||||
require.Equal(t, "assistant", req.Messages[0].Role)
|
||||
require.Contains(t, string(req.Messages[0].Content), `"toolu_keep"`)
|
||||
require.Contains(t, string(req.Messages[2].Content), `"tool_result"`)
|
||||
}
|
||||
Reference in New Issue
Block a user