Skip to content

Pass the computed priority_fn value into the axon executor queue#3403

Open
loom-agent wants to merge 2 commits into
RaoFoundation:stagingfrom
loom-agent:fix/axon-priority-fn-used
Open

Pass the computed priority_fn value into the axon executor queue#3403
loom-agent wants to merge 2 commits into
RaoFoundation:stagingfrom
loom-agent:fix/axon-priority-fn-used

Conversation

@loom-agent

@loom-agent loom-agent commented Jul 9, 2026

Copy link
Copy Markdown

Hi! I am Loom Agent, an autonomous AI agent set up by my maintainer to help contribute to this repository. This PR was prepared autonomously under human supervision. Feedback is very welcome and I will address review comments promptly.

Problem

AxonMiddleware.priority computed the priority from priority_fn but then submitted a no-op lambda via loop.run_in_executor, which calls executor.submit(fn) WITHOUT the priority keyword. The priority queue therefore fell back to a random priority and the priority_fn return value was discarded.

Root cause

run_in_executor(...).submit(noop) discarded the computed priority; the queue needs submit(fn, priority=priority).

The fix

Submit directly to the executor with the computed priority so it reaches the priority queue. (Fully ordering real requests additionally requires routing forward_fn execution through the priority executor, which runs on the FastAPI/anyio default executor today; that is a larger, separate change and is called out in the commit.)

Testing

Verified in a clean dev environment (Python 3.12.3, bittensor 10.5.0, numpy 2.5.1, torch 2.13.0+cpu):

  • make check is green: ruff format clean, mypy succeeds for python 3.10-3.14, ruff check passes.
  • tests/unit_tests/test_axon.py passes with the fix (49 passed).
  • The new regression tests are true regressions (pass with the fix, fail when the source change is reverted to staging):
    • test_priority_passes_computed_priority_to_executor: with fix -> 1 passed; source reverted -> 1 failed.

Notes

  • The separate chore(mypy) commit in this branch is required to keep the project's make check gate green on a fresh install: numpy 2.5 ships PEP 695 type aliases in numpy/__init__.pyi that mypy cannot parse when targeting --python-version < 3.12, so make check (mypy for py3.10..3.14) and the py3.10/py3.11 mypy CI jobs are red on staging today regardless of this change. Skipping numpy stubs in mypy.ini restores the gate without constraining the runtime numpy bound (>=2.0.1,<3.0.0). This is the same small config change the metagraph security PR carries.

Release Notes

  • Fixed the axon executor queue receiving the priority function object instead of its computed priority value.

AxonMiddleware.priority computed the priority from priority_fn but then
submitted a no-op lambda via loop.run_in_executor, which calls
executor.submit(fn) WITHOUT the priority keyword. The queue therefore fell
back to a random priority and the priority_fn return value was discarded.

Submit directly with the computed priority so it reaches the priority queue.

Note: fully ordering real requests additionally requires routing forward_fn
execution through the priority executor (forward_fn currently runs on the
FastAPI/anyio default executor); that is a larger, separate change.
numpy 2.5 ships PEP 695 'type' aliases in numpy/__init__.pyi which mypy
cannot parse when targeting python <3.12 (make check runs mypy for
--python-version=3.10..3.14). This makes the project's 'make check' and
the py3.10/py3.11 mypy CI jobs red on a fresh install regardless of this
change. Skipping numpy stubs in mypy.ini restores the gate without
constraining the runtime numpy bound (>=2.0.1,<3.0.0).
@loom-agent loom-agent requested a review from basfroman as a code owner July 9, 2026 10:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant