fix(models): preserve live tools in retry request snapshots - #1087
Open
zakahan wants to merge 1 commit into
Open
fix(models): preserve live tools in retry request snapshots#1087zakahan wants to merge 1 commit into
zakahan wants to merge 1 commit into
Conversation
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.
RetryingLiteLlm can fail before making a model request with
TypeError: cannot pickle '_asyncio.Future' objectwhen a tool inLlmRequest.tools_dictholds asynchronous runtime state. This was observed in a Skill sandbox after tool responses were returned, when the agent tried to start its next model turn. The unconditional retry snapshot deep-copies live tool instances even when no HTTP 429 occurs.Preserve tool instance identity through the deepcopy memo while continuing to deep-copy request contents, configuration, and the tool mapping. This keeps the retry payload isolated from first-attempt mutations without cloning tool sessions or asynchronous state. Retry eligibility and fallback behavior remain unchanged.
Validation:
pytest tests/models -q: 16 passed, including existing no-replay-after-output and non-429 tests.No live model calls were used for these tests.