think: expose additive TurnConfig stopWhen conditions#1561
Merged
Conversation
🦋 Changeset detectedLatest commit: fb5745b The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
agents
@cloudflare/ai-chat
@cloudflare/codemode
hono-agents
@cloudflare/shell
@cloudflare/think
@cloudflare/voice
@cloudflare/worker-bundler
commit: |
threepointone
approved these changes
May 19, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Expose additive AI SDK
stopWhenconditions through Think'sTurnConfig.Think already owns the
streamText()call and mapsmaxStepsto:That covers step-count limits, but it leaves no way for Think subclasses to express other AI SDK stop conditions such as:
This PR adds:
Behavior
Custom
stopWhenconditions are additive.Think now sends both:
stepCountIs(maxSteps)safety boundTurnConfig.stopWhencondition(s)to the AI SDK, so the loop ends when either matches.
That means callers can stop early after a designated tool call without silently removing Think's existing runaway-loop guardrail.
API
Example:
StopConditionis also re-exported from@cloudflare/thinkalongside the other AI SDK lifecycle-facing types.Notes on extensions
stopWhenis function-valued, so it is supported from a Think subclass'sbeforeTurn()hook, but not from sandboxed extensionbeforeTurnhooks over RPC.The docs call this out explicitly.
Tests
Added regression coverage verifying that:
stopWhen: hasToolCall("echo")Documentation
Updated:
packages/think/README.mddocs/think/lifecycle-hooks.mdto document:
TurnConfig.stopWhenmaxStepshasToolCall(...)usageValidation
Passed:
Focused Think hook suite:
Also ran:
Formatting, exports, and lint passed. Repo-wide typecheck could not complete in this environment because
tsgois unavailable: