Fix LLM callback isolation without serializing requests #4252
+163
−23
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 is a follow-up to #4218 (auto-closed by bot) addressing the same race in LLM callback handling without holding a global lock across the network call.
What changed
test_llm_callback_replacementdeterministic by mockinglitellm.completion(removes sleep/heisenbug).Why
The approach in #4218 used a class-level lock held across the entire LLM request which can serialize all concurrent agent calls. This keeps concurrency while still ensuring callback isolation.
Fixes #4214.
Note
Ensures LLM callback isolation during concurrent calls by avoiding mutation of LiteLLM global callback lists.
callbacksper request viaparams["callbacks"]inLLM.call/acalland streaming/non-streaming handlers; removes ad-hocset_callbacksusage during callseffective_callbacks(request callbacks or instance-level) without touching global state; forwards them to streaming/non-streaming pathsset_env_callbacks()unchangedtests/llms/test_concurrency.pyvalidating thread-safe isolation; updatestest_llm_callback_replacementto mocklitellm.completionfor determinismo1models; preserves token usage logging via callbacks/usage infoWritten by Cursor Bugbot for commit 31fdc55. This will update automatically on new commits. Configure here.