From 3a684cd488f3de42f6ec574f91daa7fbf069cbf5 Mon Sep 17 00:00:00 2001 From: TJ Miller Date: Mon, 26 Jan 2026 12:57:39 -0500 Subject: [PATCH] fix(openai): stream start order --- src/Providers/OpenAI/Handlers/Stream.php | 2 ++ src/Streaming/StreamState.php | 7 +++++++ tests/Unit/Streaming/StreamStateTest.php | 11 +++++++++++ 3 files changed, 20 insertions(+) diff --git a/src/Providers/OpenAI/Handlers/Stream.php b/src/Providers/OpenAI/Handlers/Stream.php index b5501d9d2..7e61e6130 100644 --- a/src/Providers/OpenAI/Handlers/Stream.php +++ b/src/Providers/OpenAI/Handlers/Stream.php @@ -250,6 +250,8 @@ protected function processStream(Response $response, Request $request, int $dept timestamp: time(), messageId: $this->state->messageId() ); + + $this->state->markTextCompleted(); } if (data_get($data, 'type') === 'response.completed') { diff --git a/src/Streaming/StreamState.php b/src/Streaming/StreamState.php index bbe320f97..b8f488349 100644 --- a/src/Streaming/StreamState.php +++ b/src/Streaming/StreamState.php @@ -118,6 +118,13 @@ public function markTextStarted(): self return $this; } + public function markTextCompleted(): self + { + $this->textStarted = false; + + return $this; + } + public function markThinkingStarted(): self { $this->thinkingStarted = true; diff --git a/tests/Unit/Streaming/StreamStateTest.php b/tests/Unit/Streaming/StreamStateTest.php index d786c38c7..87f03e9a6 100644 --- a/tests/Unit/Streaming/StreamStateTest.php +++ b/tests/Unit/Streaming/StreamStateTest.php @@ -101,6 +101,17 @@ ->and($state->hasTextStarted())->toBeTrue(); }); +it('markTextCompleted returns self and resets flag', function (): void { + $state = new StreamState; + $state->markTextStarted(); + + $result = $state->markTextCompleted(); + + expect($result)->toBe($state) + ->and($state->hasTextStarted())->toBeFalse() + ->and($state->shouldEmitTextStart())->toBeTrue(); +}); + it('markThinkingStarted returns self and sets flag', function (): void { $state = new StreamState;