41 lines
1.4 KiB
Go
41 lines
1.4 KiB
Go
package ai
|
||
|
||
import (
|
||
"testing"
|
||
|
||
"github.com/stretchr/testify/require"
|
||
)
|
||
|
||
func TestExtractChatContent_String(t *testing.T) {
|
||
raw := []byte(`{"model":"grok-3","choices":[{"finish_reason":"stop","message":{"content":"你好世界"}}]}`)
|
||
text, meta, err := extractChatContent(raw)
|
||
require.NoError(t, err)
|
||
require.Equal(t, "你好世界", text)
|
||
require.Equal(t, "stop", meta.FinishReason)
|
||
}
|
||
|
||
func TestExtractChatContent_ArrayParts(t *testing.T) {
|
||
raw := []byte(`{"choices":[{"message":{"content":[{"type":"text","text":"第一段"},{"type":"text","text":"第二段"}]}}]}`)
|
||
text, _, err := extractChatContent(raw)
|
||
require.NoError(t, err)
|
||
require.Contains(t, text, "第一段")
|
||
require.Contains(t, text, "第二段")
|
||
}
|
||
|
||
func TestExtractChatContent_Empty(t *testing.T) {
|
||
raw := []byte(`{"choices":[{"finish_reason":"length","message":{"content":""}}]}`)
|
||
text, meta, err := extractChatContent(raw)
|
||
require.NoError(t, err)
|
||
require.Equal(t, "", text)
|
||
require.Equal(t, "length", meta.FinishReason)
|
||
}
|
||
|
||
func TestExtractChatContent_IgnoresReasoningOnly(t *testing.T) {
|
||
// deepseek / kimi 思考模型常只回 reasoning_content;不可當聊天回覆
|
||
raw := []byte(`{"choices":[{"finish_reason":"length","message":{"content":null,"reasoning_content":"我們需要根據最近的對話來回應…"}}]}`)
|
||
text, meta, err := extractChatContent(raw)
|
||
require.NoError(t, err)
|
||
require.Equal(t, "", text)
|
||
require.Equal(t, "length", meta.FinishReason)
|
||
}
|