feat(core): add streamTimeout option for streaming inactivity timeout #9643
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR adds a new
streamTimeoutoption toRunnableConfigthat provides streaming inactivity timeout functionality. Unlike the existingtimeoutoption which aborts after total elapsed time,streamTimeoutonly aborts if no chunks are received within the specified time period. The timer resets each time a new chunk arrives.Closes #9088
Problem
When using the streaming API with the
timeoutoption, the stream is aborted after X seconds total time, regardless of whether chunks are still actively arriving:This is problematic for:
Solution
Add a new
streamTimeoutoption that only aborts if the stream becomes inactive:How It Works
streamTimeoutis added toRunnableConfigalongsidetimeoutensureConfig(), the value is stored in metadata asstreamTimeoutMsAsyncGeneratorWithSetupreads this value and creates anAbortControllerTesting
Here are some reproduction scripts to use:
Stream Hangs
This example shows that if a stream hangs, we will have to wait for `timeout` to trigger.Stream Aborts
If the timeout is low: the stream just aborts even though there are incoming tokens.