Skip to content

Conversation

@tpoliaw
Copy link
Contributor

@tpoliaw tpoliaw commented Jan 12, 2026

Using the same conversion as the plan-as-a-function calling in the client. Allows you to do something like

blueapi controller run count '["det"]' --num 3

from the command line instead of having to wrap everything in json

blueapi controller run count '{"detectors": ["det"], "num": 3}'

@tpoliaw tpoliaw changed the base branch from main to user-client January 13, 2026 15:00
@tpoliaw tpoliaw changed the title Pass plan parameters as individual args" Pass plan parameters as individual args Jan 13, 2026
Using the find_device method instead of looking devices up in the map of
devices directly means child devices can be found, eg 'stage.x' could be
a valid device but isn't in the devices map in its own right.
Allows autocomplete to work when working in a REPL
* Support args as well as kwargs when running plans
* Get child devices via attributes on parent devices
* Make more methods into properties
For some reason pyright can't figure out what the return type is
otherwise and you don't get completion.
It broke type checking
@tpoliaw
Copy link
Contributor Author

tpoliaw commented Jan 13, 2026

The tests fail here as the CLI now has to make a request to the server to find the parameters for the plan it is running.

In theory, the arg+kwargs reshaping could be done on the server side if the task request was updated. This would also allow plans to take positional only args as a side-effect. Another benefit of handling to top-level plan arg parsing could be to support more inject() type annotations for things like assemble() for composite types etc.

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.

2 participants