From e302e01734d339a59aadb9765592b065f520bacc Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Wed, 16 Jul 2025 19:06:08 +0000 Subject: [PATCH 1/3] codegen metadata --- .stats.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.stats.yml b/.stats.yml index e9e94382..66ee688c 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 97 openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/openai%2Fopenai-670ea0d2cc44f52a87dd3cadea45632953283e0636ba30788fdbdb22a232ccac.yml openapi_spec_hash: d8b7d38911fead545adf3e4297956410 -config_hash: 5525bda35e48ea6387c6175c4d1651fa +config_hash: b2a4028fdbb27a08de89831ed310e244 From faa0c91b9fef8d17658bdd144a45c7276967dfef Mon Sep 17 00:00:00 2001 From: David Meadows Date: Mon, 21 Jul 2025 16:56:47 -0400 Subject: [PATCH 2/3] chore(internal): refactor stream event processing to be more future proof --- packages/ssestream/ssestream.go | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/packages/ssestream/ssestream.go b/packages/ssestream/ssestream.go index d5fd544d..3534aed8 100644 --- a/packages/ssestream/ssestream.go +++ b/packages/ssestream/ssestream.go @@ -136,13 +136,6 @@ func NewStream[T any](decoder Decoder, err error) *Stream[T] { } } -var eventPrefixesToBeParsed = []string{ - "response.", - "image_generation.", - "image_generation.", - "transcript.", -} - // Next returns false if the stream has ended or an error occurred. // Call Stream.Current() to get the current value. // Call Stream.Err() to get the error. @@ -172,15 +165,7 @@ func (s *Stream[T]) Next() bool { var nxt T - hasPrefixToParse := false - for _, prefix := range eventPrefixesToBeParsed { - if strings.HasPrefix(s.decoder.Event().Type, prefix) { - hasPrefixToParse = true - break - } - } - - if s.decoder.Event().Type == "" || hasPrefixToParse { + if s.decoder.Event().Type == "" || !strings.HasPrefix(s.decoder.Event().Type, "thread.") { ep := gjson.GetBytes(s.decoder.Event().Data, "error") if ep.Exists() { s.err = fmt.Errorf("received error while streaming: %s", ep.String()) From 0bff779906d8b373f5f70a993358453dbd5ca471 Mon Sep 17 00:00:00 2001 From: "stainless-app[bot]" <142633134+stainless-app[bot]@users.noreply.github.com> Date: Fri, 25 Jul 2025 15:00:43 -0400 Subject: [PATCH 3/3] fix(client): check for empty ToolCalls before accessing --- streamaccumulator.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/streamaccumulator.go b/streamaccumulator.go index 53b7069f..347809c1 100644 --- a/streamaccumulator.go +++ b/streamaccumulator.go @@ -169,7 +169,9 @@ func (prev *chatCompletionResponseState) update(chunk ChatCompletionChunk) (just new.state = refusalResponseState case delta.JSON.ToolCalls.Valid(): new.state = toolResponseState - new.index = int(delta.ToolCalls[0].Index) + if len(delta.ToolCalls) > 0 { + new.index = int(delta.ToolCalls[0].Index) + } default: new.state = finishedResponseState }