Skip to content

kwargs: {} gets added to plan **kwargs #1719

Closed

Description

@oliwenmandiamond

When attempting to use a plan with *args and **kwargs, the current logic for prepare_params has a bug where it will provide additional kwargs like below:

2026-10-23 17:22:42,335     INFO blueapi.worker.task_worker Submitting: task_id='1ca72adb-8af4-42d5-8253-9ad6ba446699' task=Task(name='abs_set', args=['stage.x', 1.0], params={}, metadata={'user': 'alice', 'instrument_session': 'cm12345-1', 'tiled_access_tags': ['{"proposal": "cm12345", "visit": 1, "beamline": "adsim"}'], 'blueapi_task_id': '1ca72adb-8af4-42d5-8253-9ad6ba446699'}) request_id=None is_complete=False is_pending=True errors=[] outcome=None
2026-10-23 17:22:42,335     INFO blueapi.worker.task_worker Got new task: task_id='1ca72adb-8af4-42d5-8253-9ad6ba446699' task=Task(name='abs_set', args=['stage.x', 1.0], params={}, metadata={'user': 'alice', 'instrument_session': 'cm12345-1', 'tiled_access_tags': ['{"proposal": "cm12345", "visit": 1, "beamline": "adsim"}'], 'blueapi_task_id': '1ca72adb-8af4-42d5-8253-9ad6ba446699'}) request_id=None is_complete=False is_pending=True errors=[] outcome=None
2026-10-23 17:22:42,335     INFO blueapi.worker.task Asked to run plan abs_set with {} and metadata {'user': 'alice', 'instrument_session': 'cm12345-1', 'tiled_access_tags': ['{"proposal": "cm12345", "visit": 1, "beamline": "adsim"}'], 'blueapi_task_id': '1ca72adb-8af4-42d5-8253-9ad6ba446699'} for all runs
2026-10-23 17:22:42,336     INFO bluesky Executing plan <bluesky.utils.Plan object at 0x7f743a7a7880>
2026-10-23 17:22:42,336     INFO bluesky.RE.state Change state on <bluesky.run_engine.RunEngine object at 0x7f746c2ed940> from 'idle' -> 'running'
2026-10-23 17:22:42,337     INFO blueapi.service.main 127.0.0.1:46838 PUT /worker/task 200
2026-10-23 17:22:42,337    ERROR bluesky Run aborted
Traceback (most recent call last):
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1596, in _run
    msg = self._plan_stack[-1].throw(stashed_exception or resp)
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/utils/__init__.py", line 2092, in __iter__
    return (yield from self._iter)
            ^^^^^^^^^^^^^^^^^^^^^
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/plan_stubs.py", line 316, in abs_set
    ret = yield Msg("set", obj, *args, group=group, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1688, in _run
    new_response = await coro(msg)
                   ^^^^^^^^^^^^^^^
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/opentelemetry/util/_decorator.py", line 61, in async_wrapper
    return await func(*args, **kwargs)  # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 2278, in _set
    ret = obj.set(*msg.args, **kwargs)
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/ophyd_async/core/_status.py", line 289, in wrap_f
    return cls(f(*args, **kwargs), name=name)
               ~^^^^^^^^^^^^^^^^^
TypeError: StandardMovable.set() got an unexpected keyword argument 'kwargs'
2026-10-23 17:22:42,338     INFO bluesky.RE.state Change state on <bluesky.run_engine.RunEngine object at 0x7f746c2ed940> from 'running' -> 'idle'
2026-10-23 17:22:42,339    ERROR blueapi.worker.task_worker Task failed
2026-10-23 17:22:42,339    ERROR blueapi.worker.task_worker StandardMovable.set() got an unexpected keyword argument 'kwargs'
Traceback (most recent call last):
  File "/scratch/bluesky_development/blueapi/src/blueapi/worker/task_worker.py", line 436, in process_task
    result = self._current.task.do_task(self._ctx)
  File "/scratch/bluesky_development/blueapi/src/blueapi/worker/task.py", line 112, in do_task
    result = ctx.run_engine(plan(*prepared_args, **prepared_kwargs))
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 979, in __call__
    plan_return = self._resume_task(init_func=_build_task)
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1127, in _resume_task
    raise exc
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1767, in _run
    raise err
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1596, in _run
    msg = self._plan_stack[-1].throw(stashed_exception or resp)
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/utils/__init__.py", line 2092, in __iter__
    return (yield from self._iter)
            ^^^^^^^^^^^^^^^^^^^^^
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/plan_stubs.py", line 316, in abs_set
    ret = yield Msg("set", obj, *args, group=group, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 1688, in _run
    new_response = await coro(msg)
                   ^^^^^^^^^^^^^^^
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/opentelemetry/util/_decorator.py", line 61, in async_wrapper
    return await func(*args, **kwargs)  # type: ignore
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/bluesky/run_engine.py", line 2278, in _set
    ret = obj.set(*msg.args, **kwargs)
  File "/scratch/bluesky_development/blueapi/.venv/lib/python3.13/site-packages/ophyd_async/core/_status.py", line 289, in wrap_f
    return cls(f(*args, **kwargs), name=name)
               ~^^^^^^^^^^^^^^^^^
TypeError: StandardMovable.set() got an unexpected keyword argument 'kwargs'

[Motor(name="stage-x"), 1.0] {'group': None, 'wait': False, 'kwargs': {}}

The dict is the kwargs, but _inner_prepare_params adds an additional kwargs: {} inside which causes a plan to fail

Steps to reproduce. Configure system tests to use bluesky plan stub abs_set. I originally discovered this when looking at #1694

Acceptance Criteria

  • second kwargs: () is not passed to the plan

Activity

  1. changed the title [-]kwargs gets added to plan **kwargs[/-] [+]kwargs: {} gets added to plan **kwargs[/+] on Oct 23, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions