fix(ci): adopt asyncio_mode=auto and drop class-level asyncio marks - #131
Merged
Conversation
andreibalas-uipath
requested review from
DragosBobolea,
cosminacho,
cristipufu,
dragosvelcea,
ionmincu,
ionut-mihalache-uipath,
radu-mocanu and
vldcmp-uipath
as code owners
August 31, 2026 14:04
andreibalas-uipath
had a problem deploying
to
LLMGW_SETTINGS
August 31, 2026 14:05 — with
GitHub Actions
Failure
andreibalas-uipath
force-pushed
the
fix/ci-nonblocking-stdout
branch
from
August 31, 2026 14:09
56fba8f to
88ee314
Compare
andreibalas-uipath
had a problem deploying
to
LLMGW_SETTINGS
August 31, 2026 14:10 — with
GitHub Actions
Failure
andreibalas-uipath
force-pushed
the
fix/ci-nonblocking-stdout
branch
from
August 31, 2026 14:28
88ee314 to
1b45af2
Compare
Every Test job since the switch to the managed runner pool failed with BlockingIOError: the pool's log pipe is non-blocking, and pytest's ~1,278-entry warnings summary burst outruns the log reader. ~1,050 of those warnings were a single artifact: class-level @pytest.mark.asyncio on the provider integration classes (needed under strict mode for the async tests inherited from langchain_tests) also landing on every inherited sync test, warned once per parametrized item. Switch to asyncio_mode=auto - the convention already used by uipath-python and uipath-langchain-python - and remove the class-level marks, eliminating the warning flood at its source and shrinking the summary burst ~97%. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
andreibalas-uipath
force-pushed
the
fix/ci-nonblocking-stdout
branch
from
August 31, 2026 15:10
1b45af2 to
e5f6a13
Compare
radu-mocanu
approved these changes
Sep 1, 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.
What changed and why
Affected packages: none — tests + root pytest config only; no version bump per
ci_change_versionrules (it only guards the two package source trees).Every
Testjob since the switch to the centralized managed runner pool (#122, merged Aug 7 — the last green run was Aug 6) failed the same way: the full suite passes, then pytest crashes printing the warnings summary:On the managed pool the step's stdout pipe is in non-blocking mode, so when the warnings-summary burst outruns the runner's log reader,
write()returnsEAGAINand pytest exits 1 — after all tests have passed. Only theTestjob produces a burst large enough to fill the pipe buffer.The burst was ~97% one warning
Of the ~1,278 warnings per run, ~1,050 were a single artifact: the seven provider integration classes carry a class-level
@pytest.mark.asyncio(required under pytest-asyncio strict mode for the async tests inherited fromlangchain_tests), which also lands on every inherited sync test — and pytest-asyncio warns once per parametrized item:Fix
Adopt the convention already used across the family (
uipath-python's three packages anduipath-langchain-pythonall set it):asyncio_mode = "auto"+asyncio_default_fixture_loop_scope = "function"in rootpyproject.toml([tool.pytest.ini_options], new section)@pytest.mark.asynciodecorators fromtests/langchain/clients/*/test_integration.pyAsync tests need no decorator under auto mode; the sync tests no longer carry a mark, so the warning flood disappears at its source. Explicit method-level
@pytest.mark.asynciomarks elsewhere intests/remain valid under auto mode.Verification
ruff check,ruff format --check,pyright, andpytest testspass locally with results identical to main (632 passed; the localLLMGW_*env setup errors are pre-existing and identical on main).Note for the runner-pool owners
The underlying hazard is in the pool's job wrapper making the log pipe non-blocking (and re-asserting it mid-job): any repo on the pool with a large enough output burst — e.g. a mass-failure traceback dump — can still hit
BlockingIOError. This PR removes this repo's chronic trigger; the root cause is worth fixing at the worker level.🤖 Generated with Claude Code