fix(runtime): include attempt in deterministic tool call ID to prevent collisions #44
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
When providers do not supply a
tool_call_id, the runtime generates a deterministic ID in the format:This caused collisions when the same run executed multiple tool batches within a single logical turn (common when TurnID is set to a constant run identifier). The same tool at the same index would receive identical IDs across different batches, causing metadata overwrites in downstream caches keyed by
tool_call_id.Fix
The fix adds the attempt counter to the generated ID:
The runtime increments
Attempton each planner iteration, ensuring generated IDs remain unique within the run even when TurnID is constant.Changes
helpers.go: UpdatedgenerateDeterministicToolCallIDto accept anattemptparameterworkflow.go: Passbase.RunContext.Attemptto the ID generatortool_calls.go: PassrunCtx.Attemptto the ID generatorfinalizer_invoker.go: Pass attempt=1 for finalizer toolshelpers_test.go: Added tests verifying uniqueness across attemptsTesting