| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- 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"`)
- }
|