@@ -20,6 +20,8 @@ import (
2020 "testing"
2121
2222 "github.com/stretchr/testify/assert"
23+
24+ "github.com/cloudwego/eino/internal/generic"
2325)
2426
2527func TestConcatResponseMetaExtensions (t * testing.T ) {
@@ -191,3 +193,60 @@ func TestConcatAssistantGenTextExtensions(t *testing.T) {
191193 assert .Error (t , err )
192194 })
193195}
196+
197+ func TestConcatReasoningExtensions (t * testing.T ) {
198+ t .Run ("empty chunks - error" , func (t * testing.T ) {
199+ _ , err := ConcatReasoningExtensions (nil )
200+ assert .Error (t , err )
201+ })
202+
203+ t .Run ("single extension" , func (t * testing.T ) {
204+ ext := & ReasoningExtension {
205+ Content : []* ReasoningContent {
206+ {Text : "hello" , Index : generic .PtrOf (0 )},
207+ },
208+ }
209+
210+ result , err := ConcatReasoningExtensions ([]* ReasoningExtension {ext })
211+ assert .NoError (t , err )
212+ assert .Len (t , result .Content , 1 )
213+ assert .Equal (t , "hello" , result .Content [0 ].Text )
214+ })
215+
216+ t .Run ("streaming scenario - same index concatenated, ordered by index" , func (t * testing.T ) {
217+ exts := []* ReasoningExtension {
218+ {Content : []* ReasoningContent {{Text : "he" , Index : generic .PtrOf (0 )}}},
219+ {Content : []* ReasoningContent {{Text : "first" , Index : generic .PtrOf (1 )}}},
220+ {Content : []* ReasoningContent {{Text : "llo" , Index : generic .PtrOf (0 )}}},
221+ }
222+
223+ result , err := ConcatReasoningExtensions (exts )
224+ assert .NoError (t , err )
225+ assert .Len (t , result .Content , 2 )
226+ assert .Nil (t , result .Content [0 ].Index )
227+ assert .Equal (t , "hello" , result .Content [0 ].Text )
228+ assert .Nil (t , result .Content [1 ].Index )
229+ assert .Equal (t , "first" , result .Content [1 ].Text )
230+ })
231+
232+ t .Run ("nil extension and nil content skipped" , func (t * testing.T ) {
233+ exts := []* ReasoningExtension {
234+ nil ,
235+ {Content : []* ReasoningContent {nil , {Text : "ok" , Index : generic .PtrOf (0 )}}},
236+ }
237+
238+ result , err := ConcatReasoningExtensions (exts )
239+ assert .NoError (t , err )
240+ assert .Len (t , result .Content , 1 )
241+ assert .Equal (t , "ok" , result .Content [0 ].Text )
242+ })
243+
244+ t .Run ("missing index - error" , func (t * testing.T ) {
245+ exts := []* ReasoningExtension {
246+ {Content : []* ReasoningContent {{Text : "no meta" }}},
247+ }
248+
249+ _ , err := ConcatReasoningExtensions (exts )
250+ assert .Error (t , err )
251+ })
252+ }
0 commit comments