mirror of
https://gitee.com/wanwujie/sub2api
synced 2026-04-02 22:42:14 +08:00
65 lines
2.0 KiB
Go
65 lines
2.0 KiB
Go
package service
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/Wei-Shaw/sub2api/internal/pkg/apicompat"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func mustRawJSON(t *testing.T, s string) json.RawMessage {
|
|
t.Helper()
|
|
return json.RawMessage(s)
|
|
}
|
|
|
|
func TestShouldAutoInjectPromptCacheKeyForCompat(t *testing.T) {
|
|
require.True(t, shouldAutoInjectPromptCacheKeyForCompat("gpt-5.4"))
|
|
require.True(t, shouldAutoInjectPromptCacheKeyForCompat("gpt-5.3"))
|
|
require.True(t, shouldAutoInjectPromptCacheKeyForCompat("gpt-5.3-codex"))
|
|
require.False(t, shouldAutoInjectPromptCacheKeyForCompat("gpt-4o"))
|
|
}
|
|
|
|
func TestDeriveCompatPromptCacheKey_StableAcrossLaterTurns(t *testing.T) {
|
|
base := &apicompat.ChatCompletionsRequest{
|
|
Model: "gpt-5.4",
|
|
Messages: []apicompat.ChatMessage{
|
|
{Role: "system", Content: mustRawJSON(t, `"You are helpful."`)},
|
|
{Role: "user", Content: mustRawJSON(t, `"Hello"`)},
|
|
},
|
|
}
|
|
extended := &apicompat.ChatCompletionsRequest{
|
|
Model: "gpt-5.4",
|
|
Messages: []apicompat.ChatMessage{
|
|
{Role: "system", Content: mustRawJSON(t, `"You are helpful."`)},
|
|
{Role: "user", Content: mustRawJSON(t, `"Hello"`)},
|
|
{Role: "assistant", Content: mustRawJSON(t, `"Hi there!"`)},
|
|
{Role: "user", Content: mustRawJSON(t, `"How are you?"`)},
|
|
},
|
|
}
|
|
|
|
k1 := deriveCompatPromptCacheKey(base, "gpt-5.4")
|
|
k2 := deriveCompatPromptCacheKey(extended, "gpt-5.4")
|
|
require.Equal(t, k1, k2, "cache key should be stable across later turns")
|
|
require.NotEmpty(t, k1)
|
|
}
|
|
|
|
func TestDeriveCompatPromptCacheKey_DiffersAcrossSessions(t *testing.T) {
|
|
req1 := &apicompat.ChatCompletionsRequest{
|
|
Model: "gpt-5.4",
|
|
Messages: []apicompat.ChatMessage{
|
|
{Role: "user", Content: mustRawJSON(t, `"Question A"`)},
|
|
},
|
|
}
|
|
req2 := &apicompat.ChatCompletionsRequest{
|
|
Model: "gpt-5.4",
|
|
Messages: []apicompat.ChatMessage{
|
|
{Role: "user", Content: mustRawJSON(t, `"Question B"`)},
|
|
},
|
|
}
|
|
|
|
k1 := deriveCompatPromptCacheKey(req1, "gpt-5.4")
|
|
k2 := deriveCompatPromptCacheKey(req2, "gpt-5.4")
|
|
require.NotEqual(t, k1, k2, "different first user messages should yield different keys")
|
|
}
|