41 lines
1.3 KiB
Go
41 lines
1.3 KiB
Go
package chat
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestStreamRenderer_Good_ParsesThinkingContentAndToolCalls(t *testing.T) {
|
|
stream := strings.Join([]string{
|
|
`data: {"id":"chatcmpl-1","choices":[{"delta":{"thinking":"Let me think"}}]}`,
|
|
"",
|
|
`data: {"id":"chatcmpl-1","choices":[{"delta":{"content":"Hello"}}]}`,
|
|
"",
|
|
`data: {"id":"chatcmpl-1","choices":[{"delta":{"tool_calls":[{"index":0,"id":"call-1","function":{"name":"layout_suggest","arguments":"{\"window_count\":2}"}}]}}]}`,
|
|
"",
|
|
`data: {"id":"chatcmpl-1","choices":[{"finish_reason":"tool_calls"}]}`,
|
|
"",
|
|
`data: [DONE]`,
|
|
"",
|
|
}, "\n")
|
|
|
|
renderer := NewStreamRenderer(StreamCallbacks{})
|
|
require.NoError(t, renderer.Render(strings.NewReader(stream)))
|
|
|
|
message := renderer.Message("msg-1", "lemer", testTime())
|
|
require.NotNil(t, message.Thinking)
|
|
assert.Equal(t, "Hello", message.Content)
|
|
assert.Equal(t, "Let me think", message.Thinking.Content)
|
|
require.Len(t, message.ToolCalls, 1)
|
|
assert.Equal(t, "layout_suggest", message.ToolCalls[0].Name)
|
|
assert.Equal(t, 2.0, message.ToolCalls[0].Arguments["window_count"])
|
|
assert.Equal(t, "tool_calls", message.FinishReason)
|
|
}
|
|
|
|
func testTime() time.Time {
|
|
return time.Unix(1_700_000_000, 0).UTC()
|
|
}
|